package com.code.lightning.common.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Date;

/**
 * 枚举类
 * @author LGX_TvT
 * @date 2021-01-16 9:36
 */
public class LightingCore {

    /**
     * 数据库类型
     * @author LGX_TvT
     * @date 2021-01-15 0:00
     */
    public enum DataBaseCategory {

        /** mysql数据库 */
        MYSQL("MYSQL"),

        /** oracle数据库 */
        ORACLE("ORACLE");

        /** 数据库名称 */
        private String name;

        DataBaseCategory(String name) {
            this.name = name;
        }

        public String getName() {
            return name;
        }
    }

    /**
     * 基本元素枚举
     * @author LGX_TvT
     * @date 2021-01-16 0:13
     */
    public enum ElementType {

        /**
         * 类
         */
        CLASS("CLASS"),

        /**
         * 属性
         */
        FIELD("FIELD");

        private String value;

        ElementType(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }
    }

    /**
     * 语言类型
     * @author LGX_TvT
     * @date 2021-01-15 22:25
     */
    public enum LanguageCategory {

        /**
         * Java
         */
        JAVA("JAVA"),

        /**
         * python
         */
        PYTHON("PYTHON"),

        /**
         * csharp
         */
        CSHARP("CSHARP");

        private String value;

        LanguageCategory(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }
    }

    /**
     * 命名风格枚举类
     * @author LGX_TvT
     * @date 2021-01-15 22:18
     */
    public enum NameStyle {
        /**
         * 驼峰命名风格
         * 类名称大写，属性小写
         */
        HUMP("HUMP"),

        /**
         * 下划线风格
         * 使用分割线分割，全小写
         */
        UNDERLINE("UNDERLINE");

        private String value;

        NameStyle(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }
    }

    /**
     *
     * Java类型是否必须导入数据库包枚举类
     * @author LGX_TvT
     * @date 2020-09-20 1:56
     */
    @Getter
    @NoArgsConstructor
    @AllArgsConstructor
    public enum TypeRequireImport {

        /**
         * String
         */
        STRING(String.class.getTypeName(), false),

        /**
         * Integer
         */
        INTEGER(Integer.class.getTypeName(), false),

        /**
         * Long
         */
        LONG(Long.class.getTypeName(), false),

        /**
         * Double
         */
        DOUBLE(Double.class.getTypeName(), false),

        /**
         * Char
         */
        CHAR(Character.class.getTypeName(), false),

        /**
         * Date
         */
        DATE(Date.class.getTypeName(), true),

        /**
         * BigDecimal
         */
        BIG_DECIMAL(BigDecimal.class.getTypeName(), true),

        /**
         * BigInteger
         */
        BIG_INTEGER(BigInteger.class.getTypeName(), true);


        /**
         * 全类名
         */
        private String clazzName;

        /**
         * 必须
         */
        private Boolean isRequire;

        /**
         * 数据数据库类型名称获取相应枚举类
         * @param javaClassName
         * @return
         */
        public static boolean getIsRequireImport(String javaClassName) {
            for (TypeRequireImport value : TypeRequireImport.values()) {
                if(value.clazzName.equals(javaClassName)) {
                    return value.getIsRequire();
                }
            }
            return false;
        }
    }
}
